import java.util.Arrays;

public class Test {
    public static void main(String[] args) {
        String[] arr = asArray("one", "two", "three");
        System.out.println(Arrays.toString(arr));
        // ClassCastException:
        String[] firstTwo = pickTwo("one", "two", "three");
        System.out.println(Arrays.toString(firstTwo));
    }

    static <K> K[] pickTwo(K k1, K k2, K k3) {
        // 泛型可变参数 T... 在运行时创建的是 Object[]，而不是具体类型 K[]。
        // 即使编译器推断 K = String，返回的数组本质仍是 Object[]，
        // 而 Java 不允许把 Object[] 强转成 String[]。
        return asArray(k1, k2);
    }

    @SafeVarargs
    static <T> T[] asArray(T... objs) {
        return objs;
    }
}